AUTOSAR 入门教程(8)ComStack CANTP(三)
CAN 传输协议(CANTP) 是 AUTOSAR 中实现长报文多帧传输的关键模块,尤其在诊断通信(UDS/OBD)中不可或缺。本文将解析 CANTP 的分层架构、流控机制和诊断应用场景。

图:CANTP 在 AUTOSAR 通信栈中的位置(位于服务层)
CANTP 架构定位
核心功能
CANTP 的核心职责包括:
- 报文分段与重组(SF/FF/CF/FC 帧处理)
- 流控管理(BS/STmin 参数协商)
- 多帧传输状态机维护
- 诊断通信支持(ISO-TP 协议实现)
模块交互关系
| 模块 | 交互方向 | 作用 |
|---|---|---|
| PDU Router | 上层 | 接收/发送 N-PDU |
| CanIf | 下层 | 访问 CAN 控制器硬件 |
| DCM | 同级 | 处理诊断请求/响应 |
核心工作机制
帧类型解析
| 帧类型 | 标识符 | 功能 |
|---|---|---|
| 单帧(SF) | 0x0 | 传输 ≤7 字节数据 |
| 首帧(FF) | 0x1 | 标记多帧传输开始 |
| 连续帧(CF) | 0x2 | 传输后续数据块 |
| 流控帧(FC) | 0x3 | 协调传输速率 |
示例:传输 20 字节诊断报文
- 发送方:FF(0x1)+ 长度 → 接收方
- 接收方:FC(0x3)+ BS/STmin 参数
- 发送方:CF(0x2)+ 数据块(循环直到完成)
流控参数详解
流控通过以下参数协调收发双方的节奏:
- BS(Block Size):允许连续发送的 CF 帧数量
- STmin(Separation Time):帧间最小时间间隔
- 三种流控模式:
- 继续发送(FC=0x0)
- 等待流控(FC=0x1)
- 溢出中止(FC=0x2)
关键配置参数
静态配置项
/* CANTP 模块配置示例 */
CanTpChannelConfig {
CanTpNsa = TRUE; // 使用网络层地址
CanTpSTmin = 20; // 默认帧间隔(ms)
CanTpBs = 8; // 块大小
CanTpNar = 0x7DF; // 目标地址
}
动态参数限制
| 参数 | 范围 | 说明 |
|---|---|---|
| BS | 0-255 | 0 表示无流控限制 |
| STmin | 0-127ms | 超过 127ms 需特殊编码 |
| N_PDU 长度 | ≤4095 字节 | ISO-TP 标准限制 |
诊断通信实战
UDS 报文示例
# 读取故障码请求(0x1901 为 CAN ID)
[0x1901] 02 19 01 AA AA AA AA
# 响应报文(多帧传输)
[0x1901] 10 14 59 01 FF 00 00 # 首帧(总长度 20)
[0x1901] 21 01 02 03 04 05 06 # 连续帧 1
[0x1901] 22 07 08 09 0A 0B 0C # 连续帧 2
常见问题排查
- 接收超时:检查 STmin 和硬件时钟同步
- 数据丢失:验证 BS 参数和缓冲区大小
- 地址不匹配:确认 N_TA/N_SA 配置一致性
建议使用 CANoe/CANalyzer 抓包分析帧序列时序。